/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.bc;

import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.cip.esymons.colegiatura.bc.ColegiadoFacadeLocal;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.general.util.Utiles;
import org.cip.esymons.tesoreria.be.GeneracionCuotas;

/**
 *
 * @author Gilmar Montoya
 */
@Stateful(name = "realizarGeneracionCuota")
@TransactionManagement(TransactionManagementType.BEAN)
public class RealizarGeneracionCuotasBean implements RealizarGeneracionCuotasLocal {

    @PersistenceContext(unitName = "org.cip.esymons-ejbPU", type = PersistenceContextType.EXTENDED)
    private EntityManager em;
    @Resource
    UserTransaction tx;
    @EJB
    CuentaingresoOrdinariovitalicioFacadeLocal cuentaingresoOrdinariovitalicioFacadeLocal;
    @EJB
    CuentaIngresoFacadeLocal cuentaIngresoFacadeLocal;
    @EJB
    ColegiadoFacadeLocal colegiadoFacadeLocal;
    @EJB
    ValorCuentaFacadeLocal valorCuentaFacadeLocal;
    @EJB
    MovimientoCuentaFacadeLocal movimientoCuentaFacadeLocal;
    @EJB
    GeneracionCuotasFacadeLocal generacionCuotasFacadeLocal;    
    private String tipoGeneracion;
    private Date fechaInicioGeneracion;
    private Date fechaFinGeneracion;
    private Colegiado colegiado;
    //Para busqueda de colegiado
    private int buscarXDNICIP = 0;
    
   

    @PostConstruct
    public void crear() {
        tipoGeneracion = "Individual";
    }

    public void buscarColegiado(String dniOCIP) {
        try {
            if (buscarXDNICIP == 0) { /*Ingreso CIP*/
                String cipReal3 = Utiles.devuelveCipCompleto(dniOCIP);
                colegiado = colegiadoFacadeLocal.buscaColegiadoPorCIP(cipReal3);
            } else {
                colegiado = colegiadoFacadeLocal.colegiadoPersonaDNI(dniOCIP);
            }
        } catch (Exception e) {
            colegiado = null;
        }
    }    
   
    public String generacionCuota() {
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(fechaInicioGeneracion);
            cal.set(Calendar.DAY_OF_MONTH, 1);
            fechaInicioGeneracion = cal.getTime();

            Calendar cal2 = Calendar.getInstance();
            cal2.setTime(fechaFinGeneracion);
            cal2.set(Calendar.DAY_OF_MONTH, cal2.getActualMaximum(Calendar.DAY_OF_MONTH));
            fechaFinGeneracion = cal2.getTime();

            tx.begin();
            GeneracionCuotas gc = new GeneracionCuotas();
            gc.setGcufechaRegistro(new Date());
            gc.setGcuTipo(tipoGeneracion);
            gc.setGcufechaInicio(fechaInicioGeneracion);
            gc.setGcufechaFin(fechaFinGeneracion);
            if (tipoGeneracion.equals("Individual")) {
                gc.setColCodigo(colegiado);
            }
            generacionCuotasFacadeLocal.create(gc);

            if (tipoGeneracion.equals("Masiva")) {
                generacionCuotasFacadeLocal.generacionCuotas(cal.getTime(), cal2.getTime());
            } else {
                if (colegiado != null) {
                    generacionCuotasFacadeLocal.generacionIndividualCuotas(cal.getTime(), cal2.getTime(), colegiado.getSolCodigo());
                } else {
                    tx.rollback();
                }
            }
            tx.commit();
        } catch (Exception ex) {
            System.out.println("Error :" + ex.getMessage());
            try {
                tx.rollback();
            } catch (IllegalStateException ex1) {
                Logger.getLogger(RealizarGeneracionCuotasBean.class.getName()).log(Level.SEVERE, null, ex1);
            } catch (SecurityException ex1) {
                Logger.getLogger(RealizarGeneracionCuotasBean.class.getName()).log(Level.SEVERE, null, ex1);
            } catch (SystemException ex1) {
                Logger.getLogger(RealizarGeneracionCuotasBean.class.getName()).log(Level.SEVERE, null, ex1);
            }
        }
        return "";
    }

    @Remove
    public void cancelar() {
    }

    /**
     * @return the fechaInicioGeneracion
     */
    public Date getFechaInicioGeneracion() {
        return fechaInicioGeneracion;
    }

    /**
     * @param fechaInicioGeneracion the fechaInicioGeneracion to set
     */
    public void setFechaInicioGeneracion(Date fechaInicioGeneracion) {
        this.fechaInicioGeneracion = fechaInicioGeneracion;
    }

    /**
     * @return the fechaFinGeneracion
     */
    public Date getFechaFinGeneracion() {
        return fechaFinGeneracion;
    }

    /**
     * @param fechaFinGeneracion the fechaFinGeneracion to set
     */
    public void setFechaFinGeneracion(Date fechaFinGeneracion) {
        this.fechaFinGeneracion = fechaFinGeneracion;
    }

    /**
     * @return the tipoGeneracion
     */
    public String getTipoGeneracion() {
        return tipoGeneracion;
    }

    /**
     * @param tipoGeneracion the tipoGeneracion to set
     */
    public void setTipoGeneracion(String tipoGeneracion) {
        this.tipoGeneracion = tipoGeneracion;
    }

    /**
     * @return the colegiado
     */
    public Colegiado getColegiado() {
        return colegiado;
    }

    /**
     * @param colegiado the colegiado to set
     */
    public void setColegiado(Colegiado colegiado) {
        this.colegiado = colegiado;
    }

    /**
     * @return the buscarXDNICIP
     */
    public int getBuscarXDNICIP() {
        return buscarXDNICIP;
    }

    /**
     * @param buscarXDNICIP the buscarXDNICIP to set
     */
    public void setBuscarXDNICIP(int buscarXDNICIP) {
        this.buscarXDNICIP = buscarXDNICIP;
    }   
}
